package com.shuzijun.leetcode.editor.cn;
public class SortColors{
    public static void main(String[] args) {
         Solution solution = new SortColors().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {

            public void sortColors(int[] nums) {
                int p = 0;
                int q = nums.length-1;
                while (p < q){
                    if (nums[p] != 2){
                        p++;
                        continue;
                    }
                    if (nums[q] == 2){
                        q--;
                        continue;
                    }
                    swaps(nums,p,q);
                    p++;
                    q--;
                }

                int i = 0;
                int j = p;
                if (nums[j] == 2) j--;

                while (i <j){
                    if (nums[i] == 0){
                        i++;
                        continue;
                    }
                    if (nums[j] == 1){
                        j--;
                        continue;
                    }
                    swaps(nums,i,j);
                    i++;
                    j--;
                }
            }

        private void swaps(int[] nums, int p, int q) {
            int tmp = nums[p];
            nums[p] = nums[q];
            nums[q] = tmp;

        }

//    public void sortColors(int[] nums) {
//       int p = 0;
//       int q = nums.length-1;
//        while (p < q){
//            if (nums[p] != 2){
//                p++;continue;
//            }
//            if (nums[q] == 2){
//                q--;
//                continue;
//            }
//            swap(nums,p,q);
//            p++;
//                    q--;
//        }
//
//        int i = 0;
//        int j = p;
//        if (nums[j] == 2) j--;
//        while (i <j){
//            if (nums[i] == 0){
//                i++;
//                continue;
//            }
//            if (nums[j] == 1){
//                j--;
//                continue;
//            }
//            swap(nums,i,j);
//            i++;j--;
//        }
//
//    }


        }
//leetcode submit region end(Prohibit modification and deletion)

}